// 1.2 函数-函数声明
/**
 * C++ 函数
 * 函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数，即主函数 main() ，所有简单的程序都可以定义其他额外的函数。
 * 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的，但在逻辑上，划分通常是根据每个函数执行一个特定的任务来进行的。
 * 函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。 
 * C++ 标准库提供了大量的程序可以调用的内置函数。例如，函数 strcat() 用来连接两个字符串，函数 memcpy() 用来复制内存到另一个位置。
 * 函数还有很多叫法，比如方法、子例程或程序，等等。
 * 
 * ---------------------
 * 函数声明
 * 函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
 * 函数声明包括以下几个部分：
  return_type function_name( parameter list );
 *
 *
 * 针对定义的函数 max()，以下是函数声明：
 * int max(int a, int b);
 * 
 * 在函数声明中，参数的名称并不重要，只有参数的类型是必需的，因此下面也是有效的声明：
 * int max(int, int);
 * 
 * 当您在一个源文件中定义函数且在另一个文件中调用函数时，函数声明(extern)是必需的。在这种情况下，您应该在调用函数的文件顶部声明函数。
 * 
*/
#include <iostream>
int max(int a, int b); // 函数声明
// int max(int, int); // 函数声明

// int max(); // 这是可以声明，但他找不到无参数的那个max,调用时会报错
// int max(int); //  这是可以声明，但他找不到一个参数的那个max,调用时会报错

int max_1(int a, int b); // 可以定义同名的max_1;声明必须与定义一致(返回值类型、函数名、参数值类型、参数数量)

// int max_1(int, int);
int max_1(int, int, int);

int main(void)
{
  // int val = max(3, 4);
  // int val = max_1(3, 4);
  int val = max_1(3, 4, 0);
  std::cout << "val : " << val << std::endl;
  printf("---------end-----------");
  return 0;
}

// 函数定义
int max(int a, int b)
{
  if (a >= b)
  {
    return a;
  }
  else
  {
    return b;
  }
}

// 可以重复！！！
// 后者不会覆盖
int max_1(int a, int b)
{
  std::cout << "两参数" << std::endl;
  if (a >= b)
  {
    return a;
  }
  else
  {
    return b;
  }
}

int max_1(int a, int b, int c)
{
  std::cout << "三参数" << std::endl;
  if (a >= b)
  {
    return a;
  }
  else
  {
    return b;
  }
}